package dao;

import model.entity.Jogo;
import java.util.List;

import org.hibernate.Session;
import org.hibernate.Transaction;
import util.HibernateUtil;

/**
 *
 * @author CesarFrantz
 */
public class JogoDAO {
    
    private Session sessao;
    private Transaction trans;
 
    public JogoDAO() {}
    
    public void addJogo(Jogo j){
        try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans = (Transaction) sessao.beginTransaction();
            Jogo t = new Jogo();                        
            
            t.setNome(j.getNome());
            t.setTipo(j.getTipo());
            t.setDescricao(j.getDescricao());
            t.setCapa(j.getCapa());
            t.setLancamento(j.getLancamento());
            t.setStars(j.getStars());
            t.setPlataforma(j.getPlataforma());
            t.setPreco(j.getPreco());
            
            sessao.persist(t);
            trans.commit();
            
        }catch (Exception ex){
            ex.printStackTrace();
        }finally {
            sessao.close();
        }        
    }

    public void removeJogo (Jogo j){
         try {
            sessao = HibernateUtil.getSessionFactory().openSession();
            trans = (Transaction) sessao.beginTransaction();
            
            sessao.delete(j);
            trans.commit();
            
        }catch (Exception ex){
            ex.printStackTrace();
        }finally {
            sessao.close();
        }       
    } 
    
    public List<Jogo> findAll (){        
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j").list();
        sessao.close();
        return list;
    }
    public Jogo findById(int idjogo){
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        Jogo j = (Jogo) sessao.createQuery("SELECT j FROM Jogo j WHERE j.idjogo="+idjogo).uniqueResult();
        sessao.close();
        return j;
    }
    public List<Jogo> findJogoById(int idjogo){
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> j = sessao.createQuery("SELECT j FROM Jogo j WHERE j.idjogo="+idjogo).list();
        sessao.close();
        return j;
    }
    public List<Jogo> LancamentoPC(){              
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                                
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.lancamento='Sim' and j.plataforma='PC'").list();
        sessao.close();
        return list;
    }
    public List<Jogo> LancamentoXbox(){             
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.lancamento='Sim' and j.plataforma='Xbox'").list();
        sessao.close();
        return list;
    }
    public List<Jogo> LancamentoWii(){             
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.lancamento='Sim' and j.plataforma='Wii'").list();
        sessao.close();
        return list;
    }
    public List<Jogo> LancamentoPlay(){
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.lancamento='Sim' and j.plataforma='Play'").list();
        sessao.close();
        return list;
    }
    
    public List<Jogo> buscarJogosCarrinho (int idusuario){        
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.idjogo in (SELECT idjogo FROM Carrinho WHERE idusuario="+idusuario+")").list();
        sessao.close();
        return list;
    }

    public String jogosXbox(){             
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.lancamento='Sim' and j.plataforma='Xbox'").list();
        sessao.close();
        return "faces/buscaXbox.xhtml";
    }

    public List<Jogo> findJogoByPlatETipo(String plat, String tipo) {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list;
        if (tipo.equals("all")){
            list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.plataforma='"+plat+"'").list();
        }
        else list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.plataforma='"+plat+"' and j.tipo='"+tipo+"'").list();
        sessao.close();
        return list;
    }

    public List<Jogo> buscaMultipla(String nome, String plat) {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                        
        List<Jogo> list;
        if (nome.equals("") || plat.equals("") ){
            if (!nome.equals("")){
               list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.nome like '%"+nome+"%'").list();  
            }
            else {
               list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.plataforma='"+plat+"'").list(); 
            }
        }
        else list = sessao.createQuery("SELECT j FROM Jogo j WHERE j.nome like '%"+nome+"%' AND j.plataforma='"+plat+"'").list();
        
        sessao.close();
        return list;
    }

    public List<Jogo> buscaPrecosMaiores() {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                                
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j ORDER BY j.preco DESC").list();        
        sessao.close();
        return list;
    }

    public List<Jogo> buscaPrecosMenores() {
        sessao = HibernateUtil.getSessionFactory().openSession();
        sessao.beginTransaction();                                
        List<Jogo> list = sessao.createQuery("SELECT j FROM Jogo j ORDER BY j.preco").list();        
        sessao.close();
        return list;
    }
    
    
      
    
}